Two-Phase Commit
GPT-4.icon
Two-Phase Commit (2PC) とは、分散システムにおいてトランザクションの整合性を保証するためのプロトコルです。このプロトコルは、複数のノードが参加するトランザクションにおいて、全てのノードがトランザクションをコミットするか、あるいはロールバック(取り消し)するかを一致させることを目的としています。2PCは二つの主要なフェーズから構成されます。
1. **準備フェーズ(Prepare Phase)**: トランザクションコーディネータ(通常はトランザクションを開始したノード)が、参加している全てのノードにトランザクションのコミット準備ができているかを問い合わせます。参加ノードは、トランザクションを安全にコミットできる場合には準備OKのレスポンスを、それが不可能な場合は準備NGのレスポンスをコーディネータに送ります。
2. **コミット/ロールバックフェーズ(Commit/Rollback Phase)**: 全てのノードから準備OKのレスポンスがコーディネータに届いた場合、コーディネータは全ノードにコミットの指示を送ります。もし一つでも準備NGのレスポンスがあった場合、またはタイムアウトが発生した場合、コーディネータは全ノードにロールバックの指示を送ります。
このプロトコルは、全てのノードが同じアクション(コミットまたはロールバック)を取ることを保証するため、データの整合性を維持するのに有効です。しかし、全ノードの応答を待つ必要があるため、応答が遅れるノードがあるとトランザクション全体のパフォーマンスに影響を与える可能性があります。また、一部のノードが故障して応答できない場合、トランザクションは進行できなくなるという問題もあります。